Skip to content

Steps: make the no-motion empty state WHOOP 5/MG-aware (#107)#116

Merged
ryanbr merged 2 commits into
mainfrom
fix-steps-mg-empty-state
Jul 8, 2026
Merged

Steps: make the no-motion empty state WHOOP 5/MG-aware (#107)#116
ryanbr merged 2 commits into
mainfrom
fix-steps-mg-empty-state

Conversation

@ryanbr

@ryanbr ryanbr commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Fixes #107 — on a WHOOP MG, the Steps (estimated) screen is stuck on the "collecting data" prompt despite WHOOP CSV + Apple Health imports.

Root cause

The Steps estimate builds from the strap's banked motion (steps ≈ k · motion, calibrated to phone steps). With no motion, the sheet shows a "no motion yet" note — but that note (and the sheet's subtitle) were written for a WHOOP 4.0, which streams motion automatically. A 5/MG streams only live HR to a fresh app; motion + history arrive only after the experimental deep-data unlock (R22) is enabled (PuffinExperiment.deepDataEnabled, #174 — the app says as much in Settings). So on a 5/MG without that toggle, no motion is ever banked, and the screen stays stuck. The prompt's advice ("let your strap sync its history") is futile there. Imports can't substitute: WHOOP CSV export carries no motion, and Apple Health provides phone steps (the calibration target), not strap motion.

Fix (messaging only — no data-path change)

StepsCalibrationSheet is now family-aware:

  • Subtitle: "WHOOP 5.0 / MG · motion → steps" on a 5/MG.
  • No-motion note, on a 5/MG with deep-data OFF: says to turn on Settings → "Unlock WHOOP 5/MG deep data (R22)", reconnect, and let motion sync — and that importing from WHOOP/Apple Health doesn't supply the strap motion this needs.
  • 5/MG with deep-data ON: the normal "let it sync" (motion will now flow).
  • WHOOP 4.0: unchanged copy.

Mirrors the #37 precedent (explain why the steps screen is empty rather than looking broken), extended to the 5/MG case.

Testing

Strand (iOS/macOS) target — can't build on WSL; a testing build verifies the Swift compiles. Reply to the reporter will confirm whether deep-data is enabled and request a Steps-profile export (its [steps] … have=0 line + strap-state block confirm zero motion / whether motion is flowing).

File: Strand/Screens/SettingsView.swift.

ryanbr added 2 commits July 9, 2026 10:56
The Steps estimate needs the strap's banked MOTION. When there's none, the sheet
showed a WHOOP-4.0-framed prompt ("let your strap sync its history") and a hardcoded
"WHOOP 4.0" subtitle. On a 5/MG that advice is futile: a 5/MG only streams motion
once the experimental deep-data unlock (R22) is on, so it never syncs motion and the
screen stays stuck — which is exactly the report (imports don't supply strap motion
either: WHOOP CSV has no motion, Apple Health is the phone-step calibration target).

Family-aware now (StepsCalibrationSheet):
- Subtitle shows "WHOOP 5.0 / MG · motion → steps" on a 5/MG.
- The no-motion note: on a 5/MG with deep-data OFF it says to turn on
  Settings → "Unlock WHOOP 5/MG deep data (R22)", reconnect, and let motion sync
  (and that imports don't provide strap motion); with deep-data ON it's the normal
  "let it sync"; a 4.0 keeps the original copy.

Messaging only — no data-path change. Strand target (can't build on WSL); a testing
build verifies the Swift compiles.
…view)

The sheet's explainer still said "A WHOOP 4.0 doesn't transmit steps" — wrong on a
5/MG (it has a motion counter; it streams motion, not a step count, and only with
deep data on). Family-aware now, completing the 5/MG sweep of the sheet alongside
the subtitle + no-motion note. Messaging only.
@ryanbr ryanbr merged commit 56c9f2c into main Jul 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Steps analytics screen opens but shows no analytics after imports

1 participant